package com.xdb.presistence.transaction.kv;

import java.util.ArrayList;
import java.util.List;

import com.xdb.presistence.XDBPresistence;
import com.xdb.presistence.table.XDBVirtualTable;
import com.xdb.presistence.transaction.UndoLogRecord;
/**
 * 重做日志记录在KV上的实现
 * 
 * @author woate
 *
 */
public class UndoLogRecordOnKV implements UndoLogRecord {
	/**
	 * 在事务中操作影响的所有表，不过他们只是虚表，结构与表完全一样
	 */
	protected List<XDBVirtualTable> tables = new ArrayList<XDBVirtualTable>();
	/**
	 * 持久化界面类
	 */
	XDBPresistence presistence;
	
	public UndoLogRecordOnKV(XDBPresistence presistence) {
		super();
		this.presistence = presistence;
	}

	@Override
	public void commit() {
		// 在这里遍历每一个虚表提交数据变更（新增，删除，修改）
		for (XDBVirtualTable vt : tables) {
			vt.pour();
		}
	}

	@Override
	public void rollback() {
		// 放弃所有虚表中的操作
		// 这是个简单的操作，根据事务的隔离特性，
		// 其他线程不可见当前的变更没所以只需要清空即可
		tables.clear();
	}

}
